class BuildModule {
    /**
     * 获取基本信息的路径
     * @type {string}
     */
    infoPath;

    /**
     * 编译初始化信息文件名
     * @type {string}
     */
    infoName;

    /**
     * 生成文件路径
     * @type {string}
     */
    outputPath;

    /**
     * 输入文件路径
     * @type {string}
     */
    inputPath;

    /**
     * 模版文件路径
     * @type {string}
     */
    tempPath;

    /**
     * 限制执行目录列表
     * 仅执行列表中目录
     * @type {string[]}
     */
    limitList;

    /**
     * 检测限制执行的列表存在
     * 仅执行列表中目录
     * @type {boolean}
     */
    get hasLimit() {
        return this.limitList && this.limitList.length > 0;
    }

    /**
     * 屏蔽目录列表
     * @type {string[]}
     */
    unableList;

    /**
     * 构建类的构造函数
     * @type {new ()=>any}
     */
    Builder;

    /**
     * @type {any[]}
     */
    builderParams;

    /**
     * 实例化构建类
     * @param  {...any} params
     * @returns
     */
    createBuilder() {
        return new this.Builder(...this.builderParams);
    }

    /**
     * 检测限制
     * 仅执行列表中的路径
     * @param {string} dirName
     * @returns
     */
    checkLimit(dirName) {
        if (this.hasLimit) {
            for (let name of this.limitList) {
                if (dirName.indexOf(name) > -1) return true;
            }
        }
        return false;
    }

    /**
     * 屏蔽检测
     * @param {string} dirName
     * @returns
     */
    checkPathAble(dirName) {
        if (this.unableList) {
            return this.unableList.every(function (name) {
                return dirName.indexOf(name) < 0;
            });
        }
        return false;
    }
}

module.exports = BuildModule;
